﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CoffeeTeaTrading.Core.Infrastructure.Utils;

namespace CoffeeTeaTrading.Repository.Models
{
    public partial class Product:IValidatable
    {
        public static Product GetByPK(int id)
        {
            return DBContext.Instance.ProductSet.Where(pr => pr.Id == id).FirstOrDefault();
        }

        #region Implementation of IValidatable

        public bool CheckBeforeSave()
        {
            return GetRuleViolations().Count() == 0;
        }

        private bool IsUniqueName()
        {
            return !DBContext.Instance.ProductSet.Any(pr => pr.Name == Name);
        }

        //public bool CanBeDeleted()
        //{
        //    return DBContext.Instance.District.Where(district => district.Region.id == this.id)
        //               .Count() == 0;
        //}

        public IEnumerable<IRuleViolation> GetRuleViolations()
        {
            if (string.IsNullOrEmpty(Name))
            {
                yield return new RuleViolation("Название продукта не может быть пустым", this, "Name", Name);

            }
            else
            {
                if (Name != Name.Trim())
                {
                    yield return
                        new RuleViolation("Название продукта не может начинаться/заканчиваться пробельными символами",
                                          this, "Name", Name);
                    yield break;
                }
                if (!IsUniqueName())
                {
                    yield return new RuleViolation("Продукт с таким названием уже существует", this, "Name", Name);
                }
            }
            yield break;
        }

        #endregion
    }
}
